package pers.rcklos.myserver.dao;

import java.util.ArrayList;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import pers.rcklos.myserver.entity.PaperItem;
import pers.rcklos.myserver.entity.SpUser;

@Mapper
public interface UserDao {
	
	/**
	 * 查询所有用户
	 * @return 			以线性表形式返回0..*份用户数据 */
	ArrayList<SpUser> queryAllUsers();
	
	/**
	 * 以id的升序查询一页的用户
	 * @param startUid	起始id
	 * @param amount	一页的数量
	 * @return			以线性表形式返回0..*份用户数据
	 */
	ArrayList<SpUser> queryPageOfUsers(@Param("skipNum")int skipNum, @Param("rstNum")int rstNum);
	
	/**
	 * 更新用户信息
	 * @param uid		用户id
	 * @param name		新的用户名，可为null
	 * @param nick		新的用户昵称，可为null
	 * @param phone		新的用户电话，可为null
	 * 参数为null时表示不更新这一部分的数据
	 * @return			返回更新的影响行数
	 */
	int updateUserInfo(@Param("uid")int uid, @Param("name")String name, 
			@Param("nick")String nick, @Param("phone")String phone);
	
	/**
	 * 查询用户
	 * @param uid			用户id
	 * @return				返回用户对象或Null
	 */
	SpUser queryUserByUid(int uid);
	
	/**
	 * 用户登录
	 * @param userName		用户名
	 * @param userPassword	密码
	 * @return				返回用户对象或null
	 */
	SpUser queryUserByName(String userName);
	
	/**
	 * 插入用户
	 * @param userName		用户名
	 * @param userPassowrd	密码
	 * @param nickName		昵称
	 * @return				返回更新的行数，小于等于0时则更新失败
	 */
	int insertUser(@Param("userName")String userName, @Param("userPassowrd")String userPassowrd, 
			@Param("nickName")String nickName, @Param("userPhone")String userPhone);
	
	/**
	 * 更新用户昵称
	 * @param uid			用户id
	 * @param newNickName	新的昵称
	 * @return				返回更新的行数，小于等于0时则更新失败
	 */
	int updateNickNameByUID(@Param("uid")int uid, @Param("newNickName")String newNickName);
	
	/**
	 * 修改密码
	 * @param uid			用户id
	 * @return				返回更新的行数，小于等于0时则更新失败
	 */
	int updatePasswordById(@Param("uid")int uid, @Param("pwd")String pwd);
	
	/**
	 * 更新用户电话
	 * @param uid			用户id
	 * @param phone			新的电话
	 * @return				返回更新的行数，小于等于0时则更新失败
	 */
	int updateUserPhoneByUID(@Param("uid")int uid, @Param("phone")String phone);
	
	int deleteUser(@Param("uid")int uid);
}
